/**
 * com.pas.iam.account.resource.NewJDialog.java
 * Copyright (c) 2009 Pas corporation All Rights Reserved.
 */
package com.web.server.common.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 系统数据库操作父接口
 * <p>
 * 该接口定义了数据库基本的添加、删除、修改、查询操作。
 * 系统采用了Spring提供的声明式事务，HibernateTemplate，所以在对数据库进行操作的时候不需要显示的去连接关闭数据库和提交事务。
 * 该接口只是提供了基本的数据库操作，如果存在复杂的操作可以在其子类中对其扩展。
 * 
 * @author  刘红军
 * @version Ver 1.0 2008-03-06 新建
 * @since   PASIAM Ver1.0
 */
public interface IamDao {
	/**
	 * 添加、修改实体对象
	 * 
	 * @param  entity 需要添加或者修改的对象
	 * @return void
	 * @author 刘红军
	 * @since  PASIAM Ver1.0
	 */
	public void addOrUpdateObject(Object entity);

	/**
	 * 删除实体对象
	 * 
	 * @param  clazz 需要删除的实体类。
	 * @param  id    需要删除的实体对象的主键。
	 * @return void
	 * @author 刘红军
	 * @since  PASIAM Ver1.0
	 */
	public void deleteObject(Class entityClass, Serializable id);

	/**
	 * 批量删除、修改实体对象
	 * 
	 * @param  hql 需要执行的批处理语句
	 * @return int 操作影响到的记录行数。
	 * @author 刘红军
	 * @since  PASIAM Ver1.0s
	 */
	public int bulkByNamedParam(final String queryString);

	/**
     * 查询单个实体对象。
     * 
     * @param   clazz  需要查询的实体类。
     * @param   id     需要查询的实体对象的主键。
     * @return  Object 查询出来的实体对象,对象可能为null。
     */
    public <T> T getObject(Class<T> clazz, Serializable id);

	/**
	 * 查询全部实体对象
	 * 
	 * @param  clazz 需要查询的实体类。
	 * @return List  查询出来的实体对象集合。
	 * @author 刘红军
	 * @since  PASIAM Ver1.0
	 */
	public List loadObjects(Class clazz);

	/**
	 * 查询实体对象组合结果集。
	 * 
	 * @param  hql  需要执行的hql语句。
	 * @return List 查询出来的实体对象组合结果集。
	 * @author 刘红军
	 * @since  PASIAM Ver1.0
	 */
	public List queryByHql(final String hql);
	
    /**
     * 分页查询
     * <p>
     * 使用hibernate提供的方法根据查询语句，查询出实体对象组合结果集。
     * 
     * @param  hql 需要执行的hql语句。
     * @return PageListData 查询出来的实体对象组合结果集对象，包含了分页信息。
     * @since  PASIAM Ver1.0
     */
    public PageListData queryByHqlPages(final String hql, PageListData pageListData);	

	/**
	 * 参数查询
	 * 
	 * @param  hql  需要执行的hql语句。
	 * @param  parammeters 参数集合
	 * @return List 查询出来的实体对象组合结果集对象，包含了分页信息。
	 * @author 刘红军
	 * @since  PASIAM Ver1.0
	 */
	public List queryByHqlParams(final String hql, Map<String, Object> parammeters);

	/**
	 * 使用JDBC的Sql语句进行数据库查询
	 * 
	 * @param  sql  需要执行的sql语句。
	 * @return List 查询出来的实体对象组合结果集对象。
	 * @author 刘红军
	 * @since  1.0
	 */	
	public List queryByJdbc(String sql);
	
	/**
	 * 使用JDBC的Sql语句进行数据库查询
	 * 
	 * @param  sql  需要执行的sql语句。
	 * @param  paramMap 需要的参数以及值
	 * @return List 查询出来的实体对象组合结果集对象。
	 * @author 刘红军
	 * @since  PASIAM Ver1.0
	 */
	public List queryByJdbcParams(String sql, Map paramMap);

}